import request from "@/utils/request"
// 菜单基础URL
const MENU_BASE_URL = "/api/object/com.siline.chimes/ChimesMenu"

class MenuAPI {
  /**
   * 获取当前用户的路由列表
   * <p/>
   * 无需传入角色，后端解析token获取角色自行判断是否拥有路由的权限
   *
   * @returns 路由列表
   */
  static getRoutes(username: string) {
    return request<any, ResponseData<RouteVO[]>>({
      url: `api/query/com.siline.chimes/FindRoutes/search`,
      method: "post",
      data: {
        username: username,
      },
    })
  }

  /**
   * 获取菜单树列表
   *
   * @param queryParams 查询参数
   * @returns 菜单树列表
   */
  static query(data: QueryCondition = {}) {
    return request<any, ResponseData<MenuVO[]>>({
      url: `${MENU_BASE_URL}/query`,
      method: "post",
      data,
    })
  }

  /**
   * 获取菜单表单数据
   *
   * @param id 菜单ID
   */
  static getFormData(id: number) {
    return request<any, ResponseData<MenuForm>>({
      url: `${MENU_BASE_URL}/select/${id}`,
      method: "get",
    })
  }

  /**
   * 添加菜单
   *
   * @param data 菜单表单数据
   * @returns 请求结果
   */
  static add(data: MenuForm) {
    return request({
      url: `${MENU_BASE_URL}/insert`,
      method: "post",
      data: data,
    })
  }

  /**
   * 修改菜单
   *
   * @param data 菜单表单数据
   * @returns 请求结果
   */
  static update(data: MenuForm) {
    return request({
      url: `${MENU_BASE_URL}/update`,
      method: "post",
      data: data,
    })
  }

  /**
   * 删除菜单
   *
   */
  static deleteById(data: MenuForm) {
    return request({
      url: `${MENU_BASE_URL}/delete`,
      method: "post",
      data,
    })
  }

  /**
   * 根据条件批量删除
   *
   * @param data
   */
  static deleteByCondition(data: QueryCondition) {
    return request({
      url: `${MENU_BASE_URL}/delete_by`,
      method: "post",
      data: data,
    })
  }
}

export default MenuAPI

import { MenuTypeEnum } from "@/enums/MenuTypeEnum"

/** 菜单查询参数 */
export interface MenuQuery {
  /** 搜索关键字 */
  keywords?: string
}

/** 菜单视图对象 */
export interface MenuVO {
  /** 菜单ID */
  menu_id?: number
  /** 父菜单ID */
  pid?: number
  /** 菜单标题 */
  title?: string
  /** 图标 */
  icon?: string
  /** 菜单是否可见(1-是 0-否) */
  hidden?: number
  /** 外链菜单(1-是 0-否) */
  i_frame?: number
  /** 排序 */
  menu_sort?: number
  /** 路由名称 */
  name?: string
  /** 路由地址 */
  path?: string
  /** 组件路径 */
  component?: string
  /** 跳转路由路径 */
  redirect?: string
  /** 菜单 */
  type?: MenuTypeEnum
  /** 权限标识 */
  permission?: string
  /** 【菜单】是否开启页面缓存 */
  keepAlive?: number
  /** 【目录】只有一个子路由是否始终显示 */
  alwaysShow?: number
  /** 参数 */
  params?: KeyValue[]
}

/** 菜单表单对象 */
export interface MenuForm {
  /** 菜单ID */
  menu_id?: number
  /** 父菜单ID */
  pid?: number
  /** 菜单标题 */
  title?: string
  /** 图标 */
  icon?: string
  /** 菜单是否可见(1-是 0-否) */
  hidden: number
  /** 外链菜单(1-是 0-否) */
  i_frame?: number
  /** 菜单缓存(1-是 0-否) */
  cache?: number
  /** 排序 */
  menu_sort?: number
  /** 路由名称 */
  name?: string
  /** 路由地址 */
  path?: string
  /** 组件路径 */
  component?: string
  /** 跳转路由路径 */
  redirect?: string
  /** 菜单 */
  type?: MenuTypeEnum
  /** 权限标识 */
  permission?: string
  /** 【菜单】是否开启页面缓存 */
  keepAlive?: number
  /** 【目录】只有一个子路由是否始终显示 */
  alwaysShow?: number
  /** 参数 */
  params?: KeyValue[]
}

interface KeyValue {
  key: string
  value: string
}

/** RouteVO，路由对象 */
export interface RouteVO {
  /** 主键 */
  id: number
  /** 父主键 */
  pid: number
  /** 子路由列表 */
  children: RouteVO[]
  /** 组件路径 */
  component?: string
  /** 路由属性 */
  meta?: Meta
  /** 路由名称 */
  name?: string
  /** 路由路径 */
  path?: string
  /** 跳转链接 */
  redirect?: string
}

export type RouteResponseData = ResponseData<RouteVO[]>

/** Meta，路由属性 */
export interface Meta {
  /** 【目录】只有一个子路由是否始终显示 */
  alwaysShow?: boolean
  /** 是否隐藏(true-是 false-否) */
  hidden?: boolean
  /** ICON */
  icon?: string
  /** 【菜单】是否开启页面缓存 */
  keepAlive?: boolean
  /** 路由title */
  title?: string
  /**
   * 角色
   */
  roles?: string
  /**
   * 权限
   */
  perms?: string
}
